From: Andre Przywara Date: Thu, 16 Nov 2017 12:02:35 +0000 (+0000) Subject: arm64: ITS: fix cacheability adjustment X-Git-Tag: archive/raspbian/4.11.1-1+rpi1~1^2~66^2~999 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https://%22%22/%22http:/www.example.com/cgi/%22https:/%22%22?a=commitdiff_plain;h=31309b538f77a9eac5b9d1308335612ebd96bd3d;p=xen.git arm64: ITS: fix cacheability adjustment If the host GICv3 redistributor reports that the pending table cannot use shareable memory, we try to drop the cacheability attributes as well. However we fail horribly in doing computer science 101 bit masking, effectively clearing the whole register instead of just a few bits. Fix this by removing the one redundant masking operation and adding the magic negation for the actually needed other operation. Reported-by: Manish Jaggi Signed-off-by: Andre Przywara Reviewed-by: Julien Grall Release-Acked-by: Julien Grall --- diff --git a/xen/arch/arm/gic-v3-lpi.c b/xen/arch/arm/gic-v3-lpi.c index c3474f5434..84582157b8 100644 --- a/xen/arch/arm/gic-v3-lpi.c +++ b/xen/arch/arm/gic-v3-lpi.c @@ -359,8 +359,7 @@ int gicv3_lpi_init_rdist(void __iomem * rdist_base) /* If the hardware reports non-shareable, drop cacheability as well. */ if ( !(table_reg & GICR_PENDBASER_SHAREABILITY_MASK) ) { - table_reg &= GICR_PENDBASER_SHAREABILITY_MASK; - table_reg &= GICR_PENDBASER_INNER_CACHEABILITY_MASK; + table_reg &= ~GICR_PENDBASER_INNER_CACHEABILITY_MASK; table_reg |= GIC_BASER_CACHE_nC << GICR_PENDBASER_INNER_CACHEABILITY_SHIFT; writeq_relaxed(table_reg, rdist_base + GICR_PENDBASER);